public class test383 {
    //给你两个字符串：ransomNote 和 magazine ，判断 ransomNote 能不能由 magazine 里面的字符构成。
    //
    //如果可以，返回 true ；否则返回 false 。
    //
    //magazine 中的每个字符只能在 ransomNote 中使用一次。

                public boolean canConstruct(String ransomNote, String magazine) {
                    // boolean result = false;
                    // char[] ransomNoteChar = ransomNote.toCharArray();
                    // int len = ransomNoteChar.length;
                    // int i;
                    // for(i = 0; i < len; ++i){
                    //     if(magazine.contains((ransomNoteChar[i]).toString())){
                    //         continue;
                    //     }
                    // }

                    // if(i == len) {
                    //     result = true;
                    // }
                    // return result;

//                    if(ransomNote.length() > magazine.length()) {
//                        return false;
//                    }
//
//                    int[] cnt = new int[26];
//
//                    for(char c : magazine.toCharArray()) {
//                        cnt[c - 'a'] ++;
//                    }
//                    for(char c : ransomNote.toCharArray()) {
//                        cnt[c - 'a'] --;
//                        if(cnt[c - 'a'] < 0) {
//                            return false;
//                        }
//                    }
//                    return true;
//

                    //DX
//                    一开始先判断，拥有小于需求的肯定不行
                    if(magazine.length()<ransomNote.length()){
                        return false;
                    }
                    //拥有的字母数组 下标0处--代表a的个数
                    int[] has = new int[26];
                    //需要的字母数组
//                    int[] need = new int[26];
                    //将拥有的字符串拆分成字符并存入数组
                    char[] b = magazine.toCharArray();
                    //将需要的字符串拆分成字符并存入数组
                    char[] a = ransomNote.toCharArray();
                    //开始循环，向代表数组里填入数值
                    for (int i = 0;i<magazine.length();i++){
                        has[b[i]-'a']++;
                    }
                    // 1. 同理，循环录入代表需求数组
//                    for (int i = 0;i<ransomNote.length();i++){
//                        need[a[i]-'a']++;
//                    }

                    // 2. 进行判断
                    for (int i = 0;i<ransomNote.length();i++){
                        has[a[i]-'a']--;
                        if (has[a[i]-'a']<0){
                            return false;
                        }
                    }
                    return true;
        }
}
